﻿#region Copyright Notice
// This file is part of GestionPedago.
// <description>
// Copyright (C) 2012 ENI Ecole Informatique
// 
// GestionPedago is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// <program> is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
#endregion

using System;
using System.Collections.Generic;
using System.Text;
using GestionPedago.EntityContext;
using GestionPedago.Services.Framework;
using GestionPedago.Services.ES.Modele;
using GestionPedago.Persistence.OPManager;
using Persistence.OPManager;

namespace GestionPedago.Services.Mapping
{
    /// <summary>
    /// Classe de mapping Entity<->ES de l'objet EvenementPedagogique
    /// </summary>
    public class EvenementPedagogiqueMappeur : IMappeur<EvenementPedagogique, EvenementPedagogiqueES>
    {
        /// <summary>
        /// Constructeur
        /// </summary>
        public EvenementPedagogiqueMappeur() { }

        /// <summary>
        /// Mapping Entity -> ES
        /// </summary>
        /// <param name="entity">L'entity � mapper</param>
        /// <returns>L'ES obtenu</returns>
        public EvenementPedagogiqueES Entity2ES(EvenementPedagogique entity)
        {
            EvenementPedagogiqueES retour = new EvenementPedagogiqueES();
            retour.IdEvenementPedagogique = entity.IdEvenementPedagogique;
            retour.DateEvenement = entity.DateEvenement;
            retour.CodeCreateur = entity.CodeCreateur;
            retour.CodeDestinataire = entity.CodeDestinataire;
            retour.CodeTypeEvenement = entity.CodeTypeEvenement;
            retour.CodeEntreprise = entity.CodeEntreprise;
            retour.CodeStagiaire = entity.CodeStagiaire;
            retour.IdAlerte = entity.IdAlerte;
            if (entity.Alerte != null)
            {
                retour.Alerte = new AlerteMappeur().Entity2ES(entity.Alerte);
            }
            retour.Libelle = entity.Libelle;
            retour.Commentaire = entity.Commentaire;
            if (entity.TypeEvenement != null)
            {
                retour.TypeEvenement = new TypeEvenementMappeur().Entity2ES(entity.TypeEvenement);
            }
            ContactENIMappeur contactMappeur = new ContactENIMappeur();
            if(entity.ContactENI != null) {
                retour.ContactENI = contactMappeur.Entity2ES(entity.ContactENI);
            }
            if(entity.ContactENI1 != null) {
                retour.ContactENI1 = contactMappeur.Entity2ES(entity.ContactENI1);
            }
            if (entity.Entreprise != null)
            {
                retour.Entreprise = new EntrepriseMappeur().Entity2ES(entity.Entreprise);
            }
            if (entity.Stagiaire != null)
            {
                retour.Stagiaire = new StagiaireMappeur().Entity2ES(entity.Stagiaire);
            }
            retour.CodeContactEntreprise = entity.CodeContactEntreprise;
            if (entity.Contact != null)
            {
                retour.ContactEntreprise = new ContactMappeur().Entity2ES(entity.Contact);
            }
            return retour;
        }

        /// <summary>
        /// Mapping ES -> Entity
        /// </summary>
        /// <param name="es">L'ES � mapper</param>
        /// <returns>L'entity obtenu</returns>
        public EvenementPedagogique ES2Entity(EvenementPedagogiqueES es)
        {
            EvenementPedagogique retour = new EvenementPedagogique();
            retour.IdEvenementPedagogique = es.IdEvenementPedagogique;
            bool alreadyAttached = !EntityStateChecker.IsDetached(retour);
            if (!alreadyAttached)
            {
                EntityConnection.GetContext().EvenementPedagogique.Attach(retour);
            }
            retour.DateEvenement = es.DateEvenement;
            retour.CodeCreateur = es.CodeCreateur;
            retour.CodeDestinataire = es.CodeDestinataire;
            retour.CodeTypeEvenement = es.CodeTypeEvenement;
            retour.CodeEntreprise = es.CodeEntreprise;
            retour.CodeStagiaire = es.CodeStagiaire;
            retour.CodeContactEntreprise = es.CodeContactEntreprise;
            retour.IdAlerte = es.IdAlerte;
            if (es.Alerte != null)
            {
                Alerte a = new AlerteMappeur().ES2Entity(es.Alerte);
                if (a.IdAlerte == 0 && retour.IdEvenementPedagogique > 0)
                {
                    retour.Alerte = AlerteOPManager.AjouterAlerte(a);
                }
                else
                {
                    retour.Alerte = a;
                }
            }
            retour.Libelle = es.Libelle;
            retour.Commentaire = es.Commentaire;
            if (es.CodeTypeEvenement != null)
            {
                retour.TypeEvenement = TypeEvenementOPManager.GetTypeEvenementByCode(es.CodeTypeEvenement);
            }
            if (es.CodeCreateur != null)
            {
                retour.ContactENI = ContactENIOPManager.GetContactENIByCode(es.CodeCreateur.Value);
            }
            if (es.CodeDestinataire != null)
            {
                retour.ContactENI1 = ContactENIOPManager.GetContactENIByCode(es.CodeDestinataire.Value);
            }
            if (es.Entreprise != null)
            {
                retour.Entreprise = EntrepriseOPManager.GetEntrepriseByCode(es.CodeEntreprise.Value);
            }
            if (es.CodeStagiaire != 0)
            {
                retour.Stagiaire = StagiaireOPManager.GetStagiaireByCode(es.CodeStagiaire);
            }
            if (es.CodeContactEntreprise != null)
            {
                retour.Contact = ContactOPManager.GetContactByCode(es.CodeContactEntreprise.Value);
            }
            if (alreadyAttached)
            {
                EntityConnection.GetContext().EvenementPedagogique.ApplyCurrentValues(retour);
            }
            return retour;
        }
    }
}
